Linux中shell运算符详解

您所在的位置:网站首页 linux shell 加减乘除 Linux中shell运算符详解

Linux中shell运算符详解

2023-11-09 21:47| 来源: 网络整理| 查看: 265

目录

文章目录 目录概述1. 算数运算符2. 关系(比较)运算符3. 逻辑运算符4. 字符串运算符5. 文件测试运算符

概述

Bash 支持很多运算符,其中包括:

- 算数运算符 - 关系(比较)运算符 - 逻辑运算符 - 字符串运算符 - 文件测试运算符 1. 算数运算符 a=10 b=20 算术运算符说明举例+加法expr $a + $b 结果为30-减法expr $a - $b 结果为-10*乘法expr $a \* $b 结果为200/除法expr $b / $2 结果为2%取余expr $b % $a 结果为0=赋值a=$b 把变量b的值赋值给变量a==相等。判断两个数字是否相等,相等则返回true[ $a == $b ] 返回true!=不相等。判断两个数字是否相等,不相等则返回true[ $a != $b ] 返回true 其实原生bash不支持简单的数学运算,但是可以通过其他命令来实现, 例如: awk 和 expr命令进行处理计算之后才可以得出结果,expr 最常用。 expr 是一款表达式计算工具,使用它能完成表达式的求值操作。 # 以下几点需要注意: 1.表达式和运算符之间要有空格。 例如: 5+10 是不对的,必须写成 5 + 10,这与我们熟悉的大多数编程语言不一样。 2.完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。 3.乘号(*)前边必须加反斜杠(\)进行转义才能实现乘法运算。

举例说明:

#!/bin/bash #created by yuki on 20180723 #this script is used for doing ...... a=10 b=20 result=`expr $a + $b` echo "a + b = $result" result=`expr $a - $b` echo "a - b = $result" result=`expr $a \* $b` echo "a * b = $result" result=`expr $b / $a` echo " b / a = $result" result=`expr $b % $a` echo "b % a = $result"

运行结果:

a + b = 30 a - b = -10 a * b = 200 b / a = 2 b % a = 0 2. 关系(比较)运算符 a=5 b=10

关系运算符包括:

在[]中使用的比较符在(()和[[]]}中使用的比较符说明举例-eq==equal的缩写,表相等[ $a -eq $b ] 返回 false-ne!=not equal的缩写,表不相等[ $a -nq $b ] 返回 true-gt>greater thanl的缩写,表大于[ $a -gt $b ] 返回 false-ge>=greater equal的缩写,表大于等于[ $a -ge $b ] 返回 false-lt "$b" ]] 是错误的,要麽:if [ "$a" \> "$b" ] (即在单[]中需要转义,因为shell也用 表示重定向)。 3. 关系运算符只支持数字(整数),不支持字符串,除非字符串的值是数字(整数)。 4. 条件表达式要放在方括号之间,并且要有空格,例如 [[$a==$b]] 是错误的,必须写成 [[ $a == $b ]]。

举例说明:

#!/bin/bash #created by yuki on 20180723 #this script is used for doing ...... a=5 b=10 if [ $a -eq $b ] then echo "eq 关系运算结果: a等于b" else echo "eq 关系运算结果: a不等于b" fi if [ $a -ne $b ] then echo "ne 关系运算结果: a不等于b" else echo "ne 关系运算结果: a等于b" fi if [ $a -gt $b ] then echo "gt 关系运算结果: a大于b" else echo "gt 关系运算结果: a小于等于b" fi if [ $a -lt $b ] then echo "lt 关系运算结果:a小于b" else echo "lt 关系运算结果:a大于等于b" fi if [ $a -ge $b ] then echo "ge 关系运算结果:a大于等于b" else echo "ge 关系运算结果:a小于b" fi if [ $a -le $b ] then echo "le 关系运算结果:a小于等于b" else echo "le 关系运算结果:a大于b" fi

运行结果:

eq 关系运算结果: a不等于b ne 关系运算结果: a不等于b gt 关系运算结果: a小于等于b lt 关系运算结果:a小于b ge 关系运算结果:a小于b le 关系运算结果:a小于等于b 3. 逻辑运算符 在[ ]中使用的比较符在(()和[[]]}中使用的比较符说明举例赋值a=10b=25-a&&与运算,两个表达式都为true,才返回true[ $a -lt 20 -a $b -gt 20 ] 返回true-o||或运算,有一个表达式都为true,则返回true[ $a -lt 20 -o $b -gt 100 ] 返回true!!非运算,表达式为true,则返回false[ ! false ] 返回true 小结:逻辑操作符使用总结 [ ]中用 -a,-o, ! [[ ]]中用 &&,||, ! test 用法和 [ ]相同

举例说明:

#!/bin/bash #created by yuki on 20180723 #this script is used for doing ...... a=5 b=10 if [ $a != $b ] then echo "!= 逻辑非运算结果:a不等于b" else echo "!=逻辑非运算结果: a等于b" fi if [ $a -lt 50 -a $b -gt 8 ] then echo "and 逻辑与运算结果:真" else echo "and 逻辑与运算结果:假" fi if [ $a -lt 50 -o $b -gt 12 ] then echo "or 逻辑或运算结果:真" else echo "or 逻辑或运算结果:假" fi if [ $a -lt 3 -o $b -gt 8 ] then echo "or 逻辑或运算结果:真" else echo "or 逻辑或运算结果:假" fi

运行结果:

!= 逻辑非运算结果:a不等于b and 逻辑与运算结果:真 or 逻辑或运算结果:真 or 逻辑或运算结果:真 4. 字符串运算符

字符串运算符包括:

字符串运算符说明举例=检测两个字符串是否相等,相等则返回true[ $a = $b ] 返回true!=检测两个字符串是否相等,不相等则返回true[ $a != $b ] 返回true-z检测字符串长度是否为0,为0则返回true[ -z $b ] 返回true-n检测字符串长度是否为0,不为0则返回true[ -n $b ] 返回truestr检测字符串是否为null,不为null则返回true[ $b ] 返回true #经测试: 字符串比较用单等号或双等号都可以,而且外边的中括号最好是用双中括号,这样结果比较准确。

举例说明:

[root@myhost ~]# string="abcde" [root@myhost ~]# if [[ "$string" == abc* ]]; then echo "abc开头"; else echo "不是"; fi abc开头 [root@myhost ~]# if [ "$string" == abc* ]; then echo "abc开头"; else echo "不是"; fi 不是 [root@myhost ~]# if [ "$string" = abc* ]; then echo "abc开头"; else echo "不是"; fi 不是 [root@myhost ~]# if [[ "$string" = abc* ]]; then echo "abc开头"; else echo "不是"; fi abc开头 [root@myhost ~]# string="abcde" [root@myhost ~]# if [[ "$string" = "abc*" ]]; then echo "不相等"; else echo "不等"; fi 不等 [root@myhost ~]# if [[ "$string" == "abc*" ]]; then echo "不相等"; else echo "不等"; fi 不等 [root@myhost ~]# if [ "$string" == "abc*" ]; then echo "不相等"; else echo "不等"; fi 不等 [root@myhost ~]# if [ "$string" = "abc*" ]; then echo "不相等"; else echo "不等"; fi 不等

举例说明:

#!/bin/bash #created by yuki on 20180723 #this script is used for doing ...... a="cfe" b="efr" if [ "$a" = "$b" ] then echo "字符串a和字符串b相等" else echo "字符串a和字符串b不相等" fi if [ "$a" == "$b" ] then echo "字符串a和字符串b相等" else echo "字符串a和字符串b不相等" fi [root@myhost ~]# a="cfe" [root@myhost ~]# b="efr" [root@myhost ~]# if [ "$a" =="$b" ] > then ############## end #################################### if [ "$a" != "$b" ] then echo "字符串a和字符串b不相等" else echo "字符串a和字符串b相等" fi if [ -z "$a" ] then echo "字符串a的长度为0,即字符串a为空?" else echo "字符串a的长度不为0" fi if [ -n "$a" ] then echo "字符串a的长度不为0" else echo "字符串a的长度为0,即字符串a为空?" fi if [ "$a" ] then echo "字符串a不为空" else echo "字符串不为空" fi

运行结果:

字符串a和字符串b不相等 字符串a的长度不为0 字符串a的长度不为0 字符串a不为空 5. 文件测试运算符

文件测试运算符包括:

文件测试运算符说明举例-b检测文件是否是块设备文件,如果是,则返回true[ -b $file ] 返回true-c检测文件是否是字符设备文件,如果是,则返回true[ -c $file ] 返回true-d检测文件是否是目录文件,如果是,则返回true[ -d $file ] 返回true-f检测文件是否是普通文件(既不是目录也不是设备文件),如果是,则返回true[ -f $file ] 返回true-g检测文件是否设置了SGID位,如果是,则返回true[ -g $file ] 返回true-k检测文件是否设置了粘着位(stucky Bit),如果是,则返回true[ -k $file ] 返回true-p检测文件是否具名管道,如果是,则返回true[ -p $file ] 返回true-u检测文件是否设置了SUID位,如果是,则返回true[ -u $file ] 返回true-r检测文件是否可读,如果是,则返回true[ -r $file ] 返回true-w检测文件是否可写,如果是,则返回true[ -w $file ] 返回true-x检测文件是否可执行,如果是,则返回true[ -x $file ] 返回true-s检测文件是否为不为空(文件大小是否不为0),如果不为0,则返回true[ -s $file ] 返回true-e检测文件(包括目录)是否存在,如果存在,则返回true[ -e $file ] 返回true-a检测文件(包括目录)是否存在,如果存在,则返回true[ -e $file ] 返回true 文件测试运算符用于检测 Unix 文件的各种属性,-a已经被弃用了。

举例说明:

例如,变量 file 表示文件“ /etc/rc.d/rc.local”,它的大小为220kb,所有者root用户具有 rwx 权限。

[root@myhost ~]# ll /etc/rc.d/rc.local -rwxr-xr-x 1 root root 220 Oct 4 2017 /etc/rc.d/rc.local

下面的代码,将检测该文件的各种属性:

#!/bin/bash #created by yuki on 20180723 #this script is used for doing ...... file="/etc/rc.d/rc.local" if [ -e $file ] then echo "这个已经存在" else echo "这个不存在" fi if [ -r $file ] then echo "当前用户可读此文件" else echo "当前用户没有读此文件的权限" fi if [ -w $file ] then echo "当前用户可写此文件" else echo "当前用户没有写此文件的权限" fi if [ -x $file ] then echo "当前用户可以执行此文件" else echo "当前用户没有执行此文件的权限" fi if [ -d $file ] then echo "这个是目录" else echo "这个不是目录" fi if [ -f $file ] then echo "这个是普通文件" else echo "这个不是普通文件" fi if [ -s $file ] then echo "此文件大小不为0" else echo "此文件大小为0,即文件内容为空" fi

运行结果:

这个已经存在 当前用户可读此文件 当前用户可写此文件 当前用户可以执行此文件 这个不是目录 这个是普通文件 此文件大小不为0


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3